RDB 持久化存储


1.持久化的介绍

  • Redis 是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失

  • Redis 的两种持久化存储方式: RDB、AOF

  • 可以同时配置 RDB 和 AOF 两种持久化存储方式

2.RDB 持久化的介绍

  • redis 提供了 RDB 持久化的功能,这个功能可以将redis在内存中的的状态保存到硬盘中,它可以手动执行,也可以在 redis.conf 中配置定期执行

  • RDB 持久化产生的 RDB 文件 是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态

  • 在指定的时间间隔内生成数据集的时间点快照

  • 优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现

  • RDB 持久化的两种执行方式: 手动执行、定期执行

3.RDB 持久化的配置

  • 进入 redis 配置文件

vim /opt/redis-4.0.10/redis.conf

  • 添加 RDB 持久化配置项

# 定义 RDB 持久化文件名
dbfilename dbmp.rdb

# 在 900 秒内,如果有 1 个修改记录,那么就进行持久化存储
save 900 1

# 在 300 秒内,如果有 10 个修改记录,那么就进行持久化存储
save 300 10

# 在 60 秒内,如果有 10000 个修改记录,那么就进行持久化存储
save 60  10000


  • 重启 redis

    • 查看 redis-server 的进程pid

ps -ef | grep redis


    • 结束 redis-server 的进程

kill -KILL 7089

# 或

kill -9 7089


    • 重新启动 redis-server

redis-server /opt/redis-4.0.10/redis.conf

3.RDB 持久化的使用

  • 定期执行持久化存储

    • 定期执行持久化存储只需要在 redis 配置文件进行配置即可

    • 到达指定的时间点后,重启 redis 检查数据是否存在

  • 手动执行持久化存储

    • 命令: save

    • 进入 redis

redis-cli -p 6380 -a 321

    • 往 redis 中添加一个值

127.0.0.1:6380> set age 18

    • 手动执行持久化存储

127.0.0.1:6380> save

    • 检查是否生成了 RDB 持久化文件

ls /data/6380


    • 重启 redis 检查数据是否存在

AOF 持久化存储


1.持久化的介绍

  • Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失

  • Redis 的两种持久化存储方式: RDB、AOF

  • 可以同时配置 RDB 和 AOF 两种持久化存储方式

2.AOF 持久化的介绍

  • 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集

  • AOF 文件中的命令全部以redis协议的格式保存,新命令会追加到文件的末尾

  • 优点: 最大程度保证数据不丢

  • 缺点: 日记记录会非常的大(即: AOF 文件到了后期会非常的大)

3.AOF 持久化的配置

  • 进入 redis 配置文件

vim /opt/redis-4.0.10/redis.conf

  • 添加 AOF 持久化配置项

    • appendfsync 配置项的参数说明

      • always 同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
      • everysec 每秒做一次持久化存储 -> 推荐使用
      • no 依赖于系统自带的缓存大小机制

# 定义 AOF 持久化文件名,如果不配置该参数,默认文件名为: appendonly.aof
appendfilename appendonly.aof

# 是否开启 AOF 持久化存储,默认为 no
appendonly yes

# 配置 AOF 的存储模式
appendfsync everysec
appendfsync always
# appendfsync no


  • 重启 redis

    • 查看 redis-server 的进程pid

ps -ef | grep redis


    • 结束 redis-server 的进程

kill -KILL 7089

# 或

kill -9 7089


    • 重新启动 redis-server

redis-server /opt/redis-4.0.10/redis.conf

3.AOF 持久化的使用

  • 检查是否生成了 AOF 持久化文件

ls /data/6380


  • 进入 redis,往 redis 写入数据,然后重启 redis 检查数据是否存在

redis 不重启,切换RDB备份到AOF备份


1.确保 redis 版本在 2.2 以上

redis-server -v


2.实验环境的准备

  • 进入 redis 配置文件

vim /opt/redis-4.0.10/redis.conf

  • 配置 redis 配置文件

# 绑定远程连接ip,如需要远程访问当前服务器的redis(即: 让别人连接你的redis),那么就需要填写当前服务器的ip -> 0.0.0.0 代表 127.0.0.1 也代表 当前服务器ip
bind 0.0.0.0

# redis 端口
port 6380

# 是否后台运行 redis,在执行 redis-server redis.conf 命令时,如果为 yes 那么就不进入阻塞状态(即: 还可以输入其他命令),如果为 no 进入阻塞状态 (即: 无法输入别的命令)
daemonize yes

# 将 redis 进程id 写入到 redis.pid 文件中,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
pidfile /data/6380/redis.pid

# 日志级别
loglevel notice

# 日志文件,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
logfile "/data/6380/redis.log"

# 是否开启安全模式,如果开启,那么redis必须设置密码才能进行连接
protected-mode no

# 设置 redis 登陆密码
requirepass 321

# 配置 redis 的数据存放文件夹,一般存放redis的持久化存储文件和redis的日志文件等,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
dir /data/6380

# 定义 RDB 持久化文件名
dbfilename dbmp.rdb

# 在 900 秒内,如果有 1 个修改记录,那么就进行持久化存储
save 900 1

# 在 300 秒内,如果有 10 个修改记录,那么就进行持久化存储
save 300 10

# 在 60 秒内,如果有 10000 个修改记录,那么就进行持久化存储
save 60  10000

  • 启动 redis-server

redis-server /opt/redis-4.0.10/redis.conf

  • 手动执行持久化存储

    • 进入 redis

redis-cli -p 6380 -a 321

    • 往 redis 中添加值

127.0.0.1:6379> set name chaoge
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set addr shahe
OK

    • 手动执行持久化存储

127.0.0.1:6380> save

  • 检查是否生成了 RDB 持久化文件

ls /data/6380


3.备份 rdb 文件,保证数据的安全

cp /data/6380/dbmp.rdb /opt/

4.执行命令,切换 RDB 备份 到 AOF 备份中

  • 进入 redis

redis-cli -p 6380 -a 321

  • 执行切换命令

    • 此时RDB已经正确切换AOF,注意还得修改redis.conf添加AOF设置,不然重启后,通过config set的配置将丢失

127.0.0.1:6380> config set appendonly yes  # 临时开启 AOF 功能
OK
127.0.0.1:6380> config set save ''  # 关闭 RDB 功能
OK

  • 检查是否生成了 AOF 持久化文件

ls /data/6380


5.修改 redis 配置文件的设置,将 RDB 配置项删除,添加 AOF 配置项

  • 进入 redis 配置文件

vim /opt/redis-4.0.10/redis.conf

  • 修改 redis 配置文件

# 绑定远程连接ip,如需要远程访问当前服务器的redis(即: 让别人连接你的redis),那么就需要填写当前服务器的ip -> 0.0.0.0 代表 127.0.0.1 也代表 当前服务器ip
bind 0.0.0.0

# redis 端口
port 6380

# 是否后台运行 redis,在执行 redis-server redis.conf 命令时,如果为 yes 那么就不进入阻塞状态(即: 还可以输入其他命令),如果为 no 进入阻塞状态 (即: 无法输入别的命令)
daemonize yes

# 将 redis 进程id 写入到 redis.pid 文件中,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
pidfile /data/6380/redis.pid

# 日志级别
loglevel notice

# 日志文件,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
logfile "/data/6380/redis.log"

# 是否开启安全模式,如果开启,那么redis必须设置密码才能进行连接
protected-mode no

# 设置 redis 登陆密码
requirepass 321

# 配置 redis 的数据存放文件夹,一般存放redis的持久化存储文件和redis的日志文件等,注意: /data/6380/ 目录必须存在(即: 如果没有就需要手动创建)
dir /data/6380

# 是否开启 AOF 持久化存储,默认为 no
appendonly yes

# 配置 AOF 的存储模式
appendfsync everysec

  • 重启 redis

pkill redis

redis-server /opt/redis-4.0.10/redis.conf

6.进入 redis,往 redis 写入数据,然后重启 redis 检查数据是否存在